# -*- coding: utf-8 -*-
import datetime
from lr.face.data import MenuItem
from lr.face.forms import LoginForm
from lr.register.models import Confirm
from lr import settings
from lr.work.models import Work
from lr.message.models import LrMessage


def main_menu(request):
    """ Функция, формирующая главное меню для шаблона """
    mnu_data = {}
    
    # Формирование главного меню
    menu = [ MenuItem(u'Новости', 'news'), MenuItem(u'Каталог', 'catalogue') ]
    
    if request.user.is_authenticated():
        # Юзер авторизован
        if request.user.is_active:
            try:
                confirm = Confirm.objects.get(user=request.user.id)
                # Этот юзер не подтвердил свой аккаунт, сгенерировать предупреждение
                times_left = datetime.datetime.now() - confirm.timestamp
                mnu_data['header_warning_message'] = \
                _make_no_confirm_warning(settings.ACCOUNT_ACTIVATION_DAYS - times_left.days)
            except:
                pass
            
            menu.append(MenuItem(u'Кабинет', 'cabinet'))
            menu.append(MenuItem(u'Книжный шкаф', 'bookcase'))
            
            if not request.profile.is_empty():
                has_table = False
                if request.profile.is_writer():
                    # Пользователи первого и выше уровня имеют стол
                    has_table = True
                elif request.user.is_authenticated():
                    # Авторизованные пользователи, имеющие в распоряжении произведения также имеют стол
                    has_table = len(Work.objects.filter(owner=request.user).only('id')) > 0
                
                if has_table:    
                    menu.append(MenuItem(u'Письменный стол', 'table'))
            
            menu.append(MenuItem(u'Доска', 'board'))
        
        msg_count = LrMessage.objects.filter(user=request.user).count()
        if msg_count > 0:
            # Есть сообщения для этого юзера
            mnu_data['has_private_messages'] = msg_count
    else:
        # Юзер не авторизован
        menu.append(MenuItem(u'Регистрация', 'register'))
    
    menu.append(MenuItem(u'О проекте', 'about'))
    mnu_data['main_menu'] = menu
    
    # Формирование формы логина
    if request.method == 'POST' \
    and 'user_login' in request.POST \
    and 'user_password' in request.POST:
        if not request.user.is_authenticated():
            # Переданы регистрационные данные для несуществующего юзера
            mnu_data['login_form'] = LoginForm(request.POST)
    else:
        if not request.user.is_authenticated():
            # Данные не переданы
            mnu_data['login_form'] = LoginForm()
    
    return mnu_data



def _make_no_confirm_warning(days_left):
    """ Вспомогательная функция формирования предупреждения о
    непройденном подтверждении аккаунта """
    count = days_left % 10
    days_prefix = u'осталось'
    
    if days_left < 10 or days_left > 20:
        if count == 1:
            days_signature = u'день'
            days_prefix = u'остался'
        elif 1 < count < 5:
            days_signature = u'дня'
        else:
            days_signature = u'дней'
    else:
        days_signature = u'дней'
    
    if days_left > 0:
        message = u'У вас %s %d %s на подтверждение аккаунта.' % (days_prefix, days_left, days_signature)
    else:
        message = u'Вы должны подтвердить аккаунт сегодня.'
    
    return message + u' Неподтвержденный аккаунт будет заблокирован!'
        